package com.kinyx.framework.db.daos;

import java.util.List;

import com.kinyx.framework.annotation.assist.Note;
import com.kinyx.framework.db.sentence.defines.SelectResSentence;
import com.kinyx.framework.db.sentence.str.SQL;
import com.kinyx.framework.vo.InPageData;
import com.kinyx.framework.vo.OutPageData;

/**
 * 数据访问定义接口（SQL查询语句）
 */
public interface _Dao_SQL_query extends __Dao {

	/**
	 * 查询单个值
	 * @param <V> 泛型
	 * @param dp 数据访问参数
	 * @param sql 查询语句
	 * @param params 参数
	 * @param clazz 返回值类型
	 * @return 单个值
	 * @deprecated {@link _Dao_Sentence_get#getValue(DaoParam, SelectResSentence, Class)}
	 */
	@Deprecated
	@Note("使用对应的语句实现方法")
	<V> V queryValue(DaoParam dp, String sql, List<Object> params, Class<V> clazz);
	/**
	 * 查询列表数据
	 * @param <B> 泛型
	 * @param dp 数据访问参数
	 * @param sql 查询语句
	 * @param params 参数
	 * @param clazz 返回值类型
	 * @param maxCount 最大数据量，小于等于0表示不限制数量。
	 * @return 列表数据
	 * @deprecated {@link _Dao_Sentence_get#getList(DaoParam, SelectResSentence, Class)}
	 */
	@Deprecated
	@Note("使用对应的语句实现方法")
	<B> List<B> queryList(DaoParam dp, String sql, List<Object> params, Class<B> clazz, int maxCount);
	/**
	 * 查询单个数据
	 * @param <B> 泛型
	 * @param dp 数据访问参数
	 * @param sql 查询语句
	 * @param params 参数
	 * @param clazz 返回值类型
	 * @return 单个数据
	 * @deprecated {@link _Dao_Sentence_get#getOne(DaoParam, SelectResSentence, Class)}
	 */
	@Deprecated
	@Note("使用对应的语句实现方法")
	<B> B queryOne(DaoParam dp, String sql, List<Object> params, Class<B> clazz);
	/**
	 * 查询分页数据
	 * @param <B> 泛型
	 * @param dp 数据访问参数
	 * @param sql 查询语句
	 * @param params 参数
	 * @param clazz 返回值类型
	 * @param pageData 分页信息
	 * @return 分页数据
	 * @deprecated {@link _Dao_Sentence_get#getPage(DaoParam, SelectResSentence, Class)}
	 */
	@Deprecated
	@Note("使用对应的语句实现方法")
	<B> OutPageData<B> queryPage(DaoParam dp, String sql, List<Object> params, Class<B> clazz, InPageData pageData);

	/**
	 * 查询单个值
	 * @param <V> 泛型
	 * @param dp 数据访问参数
	 * @param sql 查询语句
	 * @param clazz 返回值类型
	 * @return 单个值
	 * @deprecated {@link _Dao_Sentence_get#getValue(DaoParam, SelectResSentence, Class)}
	 */
	@Deprecated
	@Note("使用对应的语句实现方法")
	default <V> V queryValue(final DaoParam dp, final SQL sql, final Class<V> clazz) { return this.queryValue(dp, sql.getSentence(), sql.getParams(), clazz); }
	/**
	 * 查询列表数据
	 * @param <B> 泛型
	 * @param dp 数据访问参数
	 * @param sql 查询语句
	 * @param clazz 返回值类型
	 * @param maxCount 最大数据量，小于等于0表示不限制数量。
	 * @return 列表数据
	 * @deprecated {@link _Dao_Sentence_get#getList(DaoParam, SelectResSentence, Class)}
	 */
	@Deprecated
	@Note("使用对应的语句实现方法")
	default <B> List<B> queryList(final DaoParam dp, final SQL sql, final Class<B> clazz, final int maxCount) { return this.queryList(dp, sql.getSentence(), sql.getParams(), clazz, maxCount); }
	/**
	 * 查询单个数据
	 * @param <B> 泛型
	 * @param dp 数据访问参数
	 * @param sql 查询语句
	 * @param clazz 返回值类型
	 * @return 单个数据
	 * @deprecated {@link _Dao_Sentence_get#getOne(DaoParam, SelectResSentence, Class)}
	 */
	@Deprecated
	@Note("使用对应的语句实现方法")
	default <B> B queryOne(final DaoParam dp, final SQL sql, final Class<B> clazz) { return this.queryOne(dp, sql.getSentence(), sql.getParams(), clazz); }
	/**
	 * 查询分页数据
	 * @param <B> 泛型
	 * @param dp 数据访问参数
	 * @param sql 查询语句
	 * @param clazz 返回值类型
	 * @param pageData 分页信息
	 * @return 分页数据
	 * @deprecated {@link _Dao_Sentence_get#getPage(DaoParam, SelectResSentence, Class)}
	 */
	@Deprecated
	@Note("使用对应的语句实现方法")
	default <B> OutPageData<B> queryPage(final DaoParam dp, final SQL sql, final Class<B> clazz, final InPageData pageData) { return this.queryPage(dp, sql.getSentence(), sql.getParams(), clazz, pageData); }

}
